﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    /// <summary>
    /// 测试集合的使用以及常用方法
    /// 集合体系结构
    /// 1. 不带泛型的
    ///    IEnumerate  <>--- IEnumerator<T>(接口)
    ///    IEnumerable <>--- IEnumerable<T>(接口)
    ///    |_ ICollection       |_ ICollection<T>
    ///       |_ IDicationary      |_ IDicationary<T>
    ///          |_ IList             |_ IList<T>
    ///                                   |_ LinkedList<T>
    ///                                   |_ HashSet<T>
    ///                                   |_ SortedSet<T>
    ///                                   |_ Stack<T>
    ///                                   |_ Queu<T>
    ///                 
    /// 
    /// 
    /// </summary>
    class _02集合
    {
        /* ------- 测试ArrayList ------ */
        public static void Main1(String[] agrs)
        {
            // 1. ArrayList
            //可重复添加元素,先行表结构
            ArrayList alist = new ArrayList();
            alist.Add("abc");
            alist.Add("abc");
            alist.Add(1230);
            //alist.RemoveAt(0);//删除索引为0的元素
            //alist.Remove(1230);//删除指定对象元素
            //alist.RemoveRange(0, 2);//删除[0,2)的元素
            alist.Insert(0, 1000);//插入一个对象
            ArrayList a = new ArrayList();
            a.Add(000);
            a.Add(111);
            alist.Insert(0, a);//插入一个集合

            //判断是否包含指定元素
            Console.WriteLine("是否包含{0}元素:{1}", 1230, alist.Contains(1230));

            //增强for循环遍历ArrayList集合
            foreach (var item in alist)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

        /*  ------ 2.测试 HashTable ------ */
        public static void Main2(String[] agrs)
        {
            ///无序,不能重复
            Hashtable ht = new Hashtable();
            ht.Add("one", 100000);
            ht.Add("two", 12000);
            Persons p = new Persons();
            ht.Add(p, 13000);

            //判断是否包含某个 key 
            Console.WriteLine("是否包含该 key：{0} ？：{1}", "one", ht.Contains("one"));

            //添加重复的key对应的value
            //ht.Add("one", "the new one value");//会报错
            ht["one"] = "the new one value";//这样才可以

            //ht.Remove("one");//清楚指定 key 的元素
            //ht.Clear();//清空

            foreach (var key in ht.Keys)
            {
                Console.WriteLine("key:{0},value:{1}", key, ht[key]);
            }

            Console.ReadKey();
        }

        /* ------ 3. 测试 Dictionary ------ */
        public static void Main3(String[] args)
        {
            Dictionary<int, string> dict = new Dictionary<int, string>();
            dict.Add(1, "one");
            dict.Add(2, "two");
            dict.Add(3, "three");
            dict.Add(4, "four");
            dict.Add(5, "five");
            dict.Add(6, "six");



            //遍历
            foreach (var key in dict.Keys)
            {
                Console.WriteLine("key:{0},value:{1}", key, dict[key]);
            }

            //第二种遍历方式
            Console.WriteLine("***********************");
            //类似Java的Map的EntrySet
            foreach (KeyValuePair<int, string> item in dict)
            {
                Console.WriteLine("key:{0},value:{1}", item.Key, item.Value);
            }

            Console.ReadKey();
        }
    }
        //自定义的类
        class Persons
        {
        }
   
}
